package Vista;
import java.util.ArrayList;
import java.util.Vector;
import javax.swing.BorderFactory;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;

import javax.swing.WindowConstants;
import javax.swing.border.BevelBorder;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import javax.swing.SwingUtilities;

import Controlador.Sistema;
import DAO.DAOAutomovil;
import DAO.DAOCliente;
import DAO.DAOModelo;
import DAO.DAOReserva;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

/**
* This code was edited or generated using CloudGarden's Jigloo
* SWT/Swing GUI Builder, which is free for non-commercial
* use. If Jigloo is being used commercially (ie, by a corporation,
* company or business for any purpose whatever) then you
* should purchase a license for each developer using Jigloo.
* Please visit www.cloudgarden.com for details.
* Use of Jigloo implies acceptance of these licensing terms.
* A COMMERCIAL LICENSE HAS NOT BEEN PURCHASED FOR
* THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED
* LEGALLY FOR ANY CORPORATE OR COMMERCIAL PURPOSE.
*/
public class frmReservas extends javax.swing.JFrame {
	private JLabel lblSeleccioneModelo;
	private JLabel lblCliente;
	private JScrollPane jScrollPane1;
	private JScrollPane jScrollPane2;
	private JTable tblReservas;
	private JScrollPane jScrollPane4;
	private JTable tblClientes;
	private JScrollPane jScrollPane3;
	private JTable tblAutomovil;
	private JTable tblModelo;
	private JLabel lblReservas;
	private JTextField txtHasta;
	private JTextField txtDesde;
	private JLabel lblHasta;
	private JLabel lblFechaDesde;
	private JButton btnCrearReserva;
	private JLabel lblAutos;

	Sistema elSistema = Sistema.Getinstancia();
	
	/**
	* Auto-generated main method to display this JFrame
	*/
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				frmReservas inst = new frmReservas();
				inst.setLocationRelativeTo(null);
				inst.setVisible(true);
			}
		});
	}
	
	public frmReservas() {
		super();
		initGUI();
		LlenarGrillaModelos();
		llenarGrillaClientes();
		llenarGrillaReservas();
		BuscarAutomoviles();
	}
	
	private void initGUI() {
		try {
			setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
			getContentPane().setLayout(null);
			{
				lblSeleccioneModelo = new JLabel();
				getContentPane().add(lblSeleccioneModelo);
				lblSeleccioneModelo.setText("Seleccione Modelo");
				lblSeleccioneModelo.setBounds(22, 18, 173, 16);
			}
			{
				lblAutos = new JLabel();
				getContentPane().add(lblAutos);
				lblAutos.setText("Seleccione Automovil");
				lblAutos.setBounds(248, 18, 140, 16);
			}
			{
				lblCliente = new JLabel();
				getContentPane().add(lblCliente);
				lblCliente.setText("Seleccione el Cliente");
				lblCliente.setBounds(497, 18, 152, 16);
			}
			{
				btnCrearReserva = new JButton();
				getContentPane().add(btnCrearReserva);
				btnCrearReserva.setText("Crear Reserva");
				btnCrearReserva.setBounds(385, 192, 233, 29);
				btnCrearReserva.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent evt) {
						btnCrearReservaActionPerformed(evt);
					}
				});
			}
			{
				lblFechaDesde = new JLabel();
				getContentPane().add(lblFechaDesde);
				lblFechaDesde.setText("Desde");
				lblFechaDesde.setBounds(24, 196, 32, 16);
			}
			{
				lblHasta = new JLabel();
				getContentPane().add(lblHasta);
				lblHasta.setText("Hasta");
				lblHasta.setBounds(183, 196, 40, 16);
			}
			{
				txtDesde = new JTextField();
				getContentPane().add(txtDesde);
				txtDesde.setText("desde");
				txtDesde.setBounds(68, 193, 98, 23);
			}
			{
				txtHasta = new JTextField();
				getContentPane().add(txtHasta);
				txtHasta.setText("hasta");
				txtHasta.setBounds(223, 193, 150, 23);
			}
			{
				lblReservas = new JLabel();
				getContentPane().add(lblReservas);
				lblReservas.setText("Reservas");
				lblReservas.setBounds(24, 228, 92, 16);
			}
			{
				jScrollPane1 = new JScrollPane();
				getContentPane().add(jScrollPane1);
				jScrollPane1.setBounds(22, 46, 215, 132);
				{
					TableModel tblModeloModel = 
						new DefaultTableModel();
					tblModeloModel = 
						new DefaultTableModel();
					tblModelo = new JTable();
					jScrollPane1.setViewportView(tblModelo);
					tblModelo.setModel(tblModeloModel);
					tblModelo.setBounds(237, 75, 57, 52);
					tblModelo.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
					tblModelo.addMouseListener(new MouseAdapter() {
						public void mouseClicked(MouseEvent evt) {
							tblModeloMouseClicked(evt);
						}
					});
				}
			}
			{
				jScrollPane2 = new JScrollPane();
				getContentPane().add(jScrollPane2);
				jScrollPane2.setBounds(248, 46, 236, 135);
				{
					TableModel tblAutomovilModel = 
						new DefaultTableModel();
					tblAutomovilModel = 
						new DefaultTableModel();
					tblAutomovil = new JTable();
					jScrollPane2.setViewportView(tblAutomovil);
					tblAutomovil.setModel(tblAutomovilModel);
					tblAutomovil.setBounds(483, 122, 50, 41);
					tblAutomovil.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
				}
			}
			{
				jScrollPane3 = new JScrollPane();
				getContentPane().add(jScrollPane3);
				jScrollPane3.setBounds(497, 46, 234, 134);
				{
					TableModel tblClientesModel = 
						new DefaultTableModel();
					tblClientesModel = 
						new DefaultTableModel();
					tblClientes = new JTable();
					jScrollPane3.setViewportView(tblClientes);
					tblClientes.setModel(tblClientesModel);
					tblClientes.setBounds(684, 34, 36, 39);
					tblClientes.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
					tblClientes.setModel(tblClientesModel);
				}
			}
			{
				jScrollPane4 = new JScrollPane();
				getContentPane().add(jScrollPane4);
				jScrollPane4.setBounds(24, 261, 707, 190);
				{
					TableModel tblReservasModel = 
						new DefaultTableModel();
					tblReservasModel = 
						new DefaultTableModel();
					tblReservas = new JTable();
					jScrollPane4.setViewportView(tblReservas);
					tblReservas.setModel(tblReservasModel);
					tblReservas.setBounds(629, 186, 66, 44);
					tblReservas.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
					tblReservas.setModel(tblReservasModel);
				}
			}
			pack();
			this.setSize(759, 501);
		} catch (Exception e) {
		    //add your error handling code here
			e.printStackTrace();
		}
	}
	
	private void LlenarGrillaModelos(){
		// Lleno la grilla de modelos

		ArrayList<DAOModelo> modelos = elSistema.ConsultarModelos();
		
		DefaultTableModel tblModelosModel = new DefaultTableModel();
		
		tblModelosModel.addColumn("marca");
		tblModelosModel.addColumn("modelo");
		tblModelosModel.addColumn("modeloTipo");
		
		for (DAOModelo dm : modelos) {
			
			Vector<String> valores = new Vector<String>();
			
			valores.add(String.valueOf(dm.getMarca()));
			valores.add(dm.getModelo());
			valores.add(dm.getModeloTipo());
			
			tblModelosModel.addRow(valores);
			this.tblModelo.setModel(tblModelosModel);
		}

	}
	
	private void llenarGrillaClientes(){
		// Lleno la grilla de clientes

		ArrayList<DAOCliente> clientes = elSistema.ConsultarClientes();
		
		DefaultTableModel tblClientesModel = new DefaultTableModel();
		
		tblClientesModel.addColumn("dni");
		tblClientesModel.addColumn("apellido");
		tblClientesModel.addColumn("nombre");
		
		for (DAOCliente daoCliente : clientes) {
			
			Vector<String> valores = new Vector<String>();
			
			valores.add(String.valueOf(daoCliente.getDni()));
			valores.add(daoCliente.getApellido());
			valores.add(daoCliente.getNombre());
			
			tblClientesModel.addRow(valores);
		}

		tblClientes.setModel(tblClientesModel);
		
	}
	
	private void llenarGrillaReservas(){
		
		ArrayList<DAOReserva> reservas = elSistema.ConsultarReservas();
		
		DefaultTableModel tm = new DefaultTableModel();
		tm.addColumn("dni");
		tm.addColumn("nombre");
		tm.addColumn("apellido");
		tm.addColumn("marca");
		tm.addColumn("modelo");
		tm.addColumn("patente");
		tm.addColumn("desde");
		tm.addColumn("hasta");
		
		
		for (DAOReserva dr : reservas) {
			Vector<String> valores = new Vector<String>();
			valores.add(String.valueOf(dr.getDniCliente()));
			valores.add(dr.getNombreCliente());
			valores.add(dr.getApellidoCliente());
			valores.add(dr.getMarca());
			valores.add(dr.getModelo());
			valores.add(dr.getPatente());
			valores.add(dr.getDesde());
			valores.add(dr.getHasta());
			
			tm.addRow(valores);
			
		}
		
		this.tblReservas.setModel(tm);
		
	}
	
	private void tblModeloMouseClicked(MouseEvent evt) {
		BuscarAutomoviles();
	}
	
	private void BuscarAutomoviles(){
		
		String marca = "";
		String modelo = "";
		
		JTable tabla = this.tblModelo;
        TableModel tablaModelo;
        tablaModelo = (TableModel) this.tblModelo.getModel();
		
        this.setTitle("Busca");
        
	    int registro = tabla.getSelectedRow();
	    
	    DefaultTableModel tblAutomovilesModel = new DefaultTableModel();
	    tblAutomovilesModel.addColumn("patente");
	    tblAutomovilesModel.addColumn("anio");
	    tblAutomovilesModel.addColumn("kilometraje");
	    
	    if (registro >= 0) {
			marca = ((String) tablaModelo.getValueAt(registro, 0));
			modelo = ((String) tablaModelo.getValueAt(registro, 1));
			
			 this.setTitle(marca + " " + modelo);
			
			ArrayList<DAOAutomovil> listaA = elSistema.ConsultarAutomoviles(marca, modelo);
			
			this.setTitle(String.valueOf(listaA.size()));
			
			for (DAOAutomovil auxAuto : listaA) {
				
				Vector<String> valores = new Vector<String>();
				
				valores.add(auxAuto.getPatente());
				valores.add(String.valueOf(auxAuto.getAnio()));
				valores.add(String.valueOf(auxAuto.getKilometraje()));
				
				tblAutomovilesModel.addRow(valores);
			}
			this.tblAutomovil.setModel(tblAutomovilesModel);
	    }
	}
	
	private void btnCrearReservaActionPerformed(ActionEvent evt) {
		
		Integer dni = null;
		String desde;
		String hasta; 
		String patente = null;
		
        TableModel tablaModelo;
        tablaModelo = (TableModel) this.tblClientes.getModel();
		
	    int registro = tblClientes.getSelectedRow();
	    if (registro >= 0) {
			dni= Integer.valueOf((String) tablaModelo.getValueAt(registro, 0));
	    }
	    else return;
	    
        tablaModelo = (TableModel) this.tblAutomovil.getModel();
		
	    registro = tblAutomovil.getSelectedRow();
	    if (registro >= 0) {
			patente = (String) tablaModelo.getValueAt(registro, 0);
	    }
	    else return;
		
	    desde = this.txtDesde.getText();
	    hasta = this.txtHasta.getText();
	    
	    elSistema.RealizarReserva(patente, dni, desde, hasta);
	    llenarGrillaReservas();
	}

}
